/*
 * Created on 24/06/2005
 *
 */
package com.master.bd.calculo_frete;

import java.sql.*;

import com.master.ed.*;
import com.master.root.*;
import com.master.util.*;
import com.master.util.bd.*;

/**
 * @author Tiago
 *
 */
public class Calcula_Frete_Especial extends Calcula_Frete{


    public Calcula_Frete_Especial(ExecutaSQL executasql) {
        super(executasql);
        // // ("Calcula_Frete_Especial 1");
    }


    public void calcula(Calcula_FreteED ed)
    throws Excecoes{


            Localiza_Tabela = new Localiza_Tabela(this.executasql);
            Tabela_FreteBean tabelaFreteED = new Tabela_FreteBean();

            ed.setLocalizado("N");
            ed.setDM_Tem_Cidade("S");
            ed.setDM_Tem_Peso("N");
            ed.setDM_Tem_Modal("N");
            ed.setDM_Tem_Validade("N");
            ed.setDM_Tem_Vigencia("N");
            ed.setDM_Tem_Empresa("N");
            ed.setDM_Tem_Regiao_Estado("S");
            ed.setDM_Tem_Estado("S");
            ed.setDM_Tem_Subregiao("N");
            ed.setDM_Tem_Regiao_Pais("N");
            ed.setDM_Tem_Pais("S");
            ed.setDM_Tabela_Reversa("N");
            ed.setDM_Tem_Tabela_Unidade("S");
            ed.setDM_Tem_Produto("S");

            ed.setDM_Percurso_Busca("Origem_Destino");
            ed.setDM_Percurso_Busca("Estado Destino " + ed.getOID_Estado_Destino());


                // // ("Localiza_Tabela 1 Tarifa=" +ed.getDM_Tipo_Tarifa() );

                tabelaFreteED = Localiza_Tabela.escolheTabela(ed);


                if ("S".equals(tabelaFreteED.getDM_Localizado())) {
                  // // ("achou tabela- oid >> " + tabelaFreteED.getOID());

                    if ("001".equals(ed.getDM_Tipo_Tarifa())) calculaEspecial001(tabelaFreteED, ed);
                    if ("010".equals(ed.getDM_Tipo_Tarifa())) calculaEspecial010(tabelaFreteED, ed);
                    if ("020".equals(ed.getDM_Tipo_Tarifa())) calculaEspecial020(tabelaFreteED, ed);
                    if ("070".equals(ed.getDM_Tipo_Tarifa())) calculaEspecial070(tabelaFreteED, ed);
                    if ("080".equals(ed.getDM_Tipo_Tarifa())) calculaEspecial080(tabelaFreteED, ed);
                    if ("140".equals(ed.getDM_Tipo_Tarifa())) calculaEspecial140(tabelaFreteED, ed);
                    if ("180".equals(ed.getDM_Tipo_Tarifa())) calculaEspecial180(tabelaFreteED, ed);
                    if ("200".equals(ed.getDM_Tipo_Tarifa())) calculaEspecial200(tabelaFreteED, ed);
                    if ("210".equals(ed.getDM_Tipo_Tarifa())) calculaEspecial210(tabelaFreteED, ed);
                    if ("240".equals(ed.getDM_Tipo_Tarifa())) calculaEspecial240(tabelaFreteED, ed);

                    this.calculaFreteValor(tabelaFreteED, ed);

                    // // ("calculou tudo ");

                }
    }

    protected void calculaEspecial001( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------
            // //  ("calculaEspecial001 >> " + ed.getDM_Classificacao_Produto ());

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=0;

            VL_Movimento_Frete = tabelaFreteED.getVL_Especial1() * ed.getNR_Peso_Tabela();
            if (VL_Movimento_Frete < tabelaFreteED.getVL_C_Taxa_Minima()){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Taxa_Minima();
            }
            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaEspecial010( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=0;

            VL_Movimento_Frete = tabelaFreteED.getVL_Especial2() * ed.getNR_Peso_Tabela();
            if (VL_Movimento_Frete < tabelaFreteED.getVL_C_Taxa_Minima()){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Taxa_Minima();
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaEspecial020( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=0;

            VL_Movimento_Frete = tabelaFreteED.getVL_Especial3() * ed.getNR_Peso_Tabela();
            if (VL_Movimento_Frete < tabelaFreteED.getVL_C_Taxa_Minima()){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Taxa_Minima();
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaEspecial070( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=0;

            VL_Movimento_Frete = tabelaFreteED.getVL_Especial4() * ed.getNR_Peso_Tabela();
            if (VL_Movimento_Frete < tabelaFreteED.getVL_C_Taxa_Minima()){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Taxa_Minima();
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaEspecial080( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=0;

            VL_Movimento_Frete = tabelaFreteED.getVL_Especial5() * ed.getNR_Peso_Tabela();
            if (VL_Movimento_Frete < tabelaFreteED.getVL_C_Taxa_Minima()){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Taxa_Minima();
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaEspecial140( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=0;

            VL_Movimento_Frete = tabelaFreteED.getVL_Especial6() * ed.getNR_Peso_Tabela();
            if (VL_Movimento_Frete < tabelaFreteED.getVL_C_Taxa_Minima()){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Taxa_Minima();
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaEspecial180( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=0;

            VL_Movimento_Frete = tabelaFreteED.getVL_Especial7() * ed.getNR_Peso_Tabela();
            if (VL_Movimento_Frete < tabelaFreteED.getVL_C_Taxa_Minima()){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Taxa_Minima();
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaEspecial200( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=0;

            VL_Movimento_Frete = tabelaFreteED.getVL_Especial8() * ed.getNR_Peso_Tabela();
            if (VL_Movimento_Frete < tabelaFreteED.getVL_C_Taxa_Minima()){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Taxa_Minima();
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaEspecial210( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=0;

            VL_Movimento_Frete = tabelaFreteED.getVL_Especial9() * ed.getNR_Peso_Tabela();
            if (VL_Movimento_Frete < tabelaFreteED.getVL_C_Taxa_Minima()){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Taxa_Minima();
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaEspecial240( Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed) throws Excecoes {
            // --------------------FRETE PESO--------------------------------------------------

            Tipo_Movimento = "FP";
            VL_Movimento_Frete=0;

            VL_Movimento_Frete = tabelaFreteED.getVL_Especial10() * ed.getNR_Peso_Tabela();
            if (VL_Movimento_Frete < tabelaFreteED.getVL_C_Taxa_Minima()){
                VL_Movimento_Frete = tabelaFreteED.getVL_C_Taxa_Minima();
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);
    }

    protected void calculaFreteValor(Tabela_FreteBean tabelaFreteED, Calcula_FreteED ed)  throws Excecoes{
        // --------------------AD VALOREM--------------------------------------------------
            Tipo_Movimento = "AV";
            VL_Movimento_Frete = (ed.getVL_Nota_Fiscal() * tabelaFreteED.getPE_C_Ad_Valorem() / 100);

            if (VL_Movimento_Frete < tabelaFreteED.getPE_C_Ad_Valorem()){
                VL_Movimento_Frete = tabelaFreteED.getPE_C_Ad_Valorem();
            }

            ed.setCD_Tipo_Movimento(Tipo_Movimento);
            ed.setOID_Tabela_Frete(String.valueOf(tabelaFreteED.getOID()));
            ed.setVL_Movimento(VL_Movimento_Frete);
            this.incluiMovimento(ed);

    }


}
